前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python知识学习 -- day01

Python知识学习 -- day01

作者头像
忆想不到的晖
发布2022-04-13 17:34:20
2130
发布2022-04-13 17:34:20
举报
文章被收录于专栏:huihuihui

python 知识学习

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 主要用于在多继承时判断方法,属性的调用路径

  • 在搜索方法时,是按照__mro__()输出的结果,从左到右的顺序查找的
  • 如果找不到在当前类中找到方法就直接执行,不在搜索
  • 没有找到,就依次查找下一个类中是否有对应的方法,找到执行,不在搜索
  • 如果最后一个类,还没有找到方法,程序报错
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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-08-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • python 知识学习
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档