from domain.domain import User
# 用列表存储不同数据类型的数据
type_list = ["hello python", 100, 3.14, True, [], (),{}]
user = User("hui", "123")
type_list.append(user)
# 打印数据类型
for data_type in type_list:
print(type(data_type))
print("*"*50)
address = id(user)
print("address的数据类型%s" % type(address))
print("user:"+str(user))
print("默认:"+str(address))
print("8进制:%o" % address)
print("10进制:%d" % address)
print("16进制:%0x" % address)
# 查看对象的内置的属性和方法
print(dir(user))
- id()方法----查看变量、对象的地址默认返回整型(int)10进制 - type()方法----查看变量、对象的数据类型 - dir()方法----查看对象的内置的属性和方法返回列表[] - %o 字母o 输出8进制(Octal), %d 十进制(Decimal), %0x十六进制(Hexadecimal)
用英文单词来记住他们格式的意思,这样的记忆更能在大脑存储更久,还练习英语(这是我个人的学习观点
)
为什么16进制的英文单词跟0x好像跟Heaxdecimal单词没有什么关联。经过百度发现python估计也是根据C/C++来这样定义的(足够说明C语言的经典) 如果不使用特殊的书写形式,16进制数也会和10进制相混。随便一个数:9876,就看不出它是16进制或10进制。 C,C++规定,16进制数必须以 0x开头。比如 0x1表示一个16进制数。而1则表示一个十进制。另外如:0xff,0xFF,0X102A,等等。其中的x也不区分大小写。(注意:0x中的0是数字0,而不是字母O)
输出结果
<class 'str'>
<class 'int'>
<class 'float'>
<class 'bool'>
<class 'list'>
<class 'tuple'>
<class 'domain.domain.User'>
**************************************************
address的数据类型<class 'int'>
user:<domain.domain.User object at 0x00A391B0>
id()默认:10719664
8进制:50710660
10进制:10719664
16进制:a391b0
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__',
'__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__',
'__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__',
'password', 'to_string', 'username']
了解类的内置方法__mro__()方法mro英文全称Method Resolution Order 主要用于在多继承时判断方法,属性的调用路径
class A(object):
def out(self):
print("A类方法")
class B(object):
def out(self):
print("B类方法")
class C(A,B):
pass
c = C()
# 打印C类的调用路径顺序(注意要类名.__mro__)
print(C.__mro__)
c.out()
输出结果 (<class ‘main.C’>, <class ‘main.A’>, <class ‘main.B’>, <class ‘object’>) A类方法
你们可以尝试一下把C类的继承顺序改成B,A打印就是 (<class ‘main.C’>, <class ‘main.B’>, <class ‘object’>, <class ‘main.A’>) B类方法
如果C类把out()方法重写那么将执行C类的out()
C类中pass关键字是为了保证程序的语法不报错我们可以用pass关键字来占位
这里再介绍一下python新式类和旧式类 class A(object): 新式类 class A(): 旧式类 python 3.x版本中 class A:默认继承object python 2.x版本中 class A:则就是旧式类不包含object的方法
建议:无论那个python版本,当一个类没有父类的时候都手动写class A(object):这种格式(养成好习惯)
模块名.__file__查看模块或者包的路径
import test
print(test.__file__)
输出结果(以我个人为例) D:\Tools\Python\workplace\AutoPractice\test.py