嘎嘎,诺子上新闻了。
words and class – 10
literature
sociology
linguistics
psycology
philosophy
engineering
mechanical engineering
electronic engineering
medicine
social science
I bark and wag my tail, which one am I?
Which pair of shoes is in the middle?
What machine is Molly using?
Which one is blue and green?
It’s getting dark. What should the driver turn on?
What is Molly playing with?
What letter is this? A is an alligator.
Guess who’s driving this sleigh. Santa Claus.
What is Molly doing? She is dancing.
8.5 Inheritance
Of course, a language feature would not be worthy of the name “class” without supporting inheritance. The syntax for a derived class definition looks like this:
The name BaseClassName must be defined in a scope containing the derived class definition. In place of a base class name, other arbitrary expressions are also allowed. This can be useful, for example, when the base class is defined in another module:
Execution of a derived class definition proceeds the same as for a base class. When the class object is constructed, the base class is remembered. This is used for resolving attribute reference: if a requested attribute is not found in the class, the search proceeds to look in the base class. This rule is applied recursively if the base class itself is derived from some other class.
There’s nothing special about instantiation of derived classes: DerivedClassName() creates a new instance of the class. Method references are resolved as follows: the corresponding class attribute is searched, descending down the chain of base classes if necessary, and the method reference is valid if this yields a function object.
Derived classes may override methods of their base classes. Because methods have no special privileges when calling other methods of the same object, a method of a base class another method defined in the same base class may end up calling a method of a derived class that overrides it.(For C++ programmers: all methods in Python are effectively virtual.)
An overriding method in a derived class may in fact want to extend rather than simply replace the base class method of the same name. There is a simple way to call the base class method directly: just call ‘BaseClassName.methodname(self, arguments)’. This is occasionally useful to clients as well.(Note that this only works if the base class is defined or imported directly in the global scope.)
Posted in English.
– 04/25/2012
words and class – 9
history
algebra
geometry
geography
biology
chemistry
biochemistry
physics
physical geography
Any function object that is a class attribute defines a method for instances of that class. It is not necessary that the function definition is textually enclosed in the class definition: assigning a function object to a local variable in the class is also ok. For example:
Now f, g and h are all attributes of class C that refer to function objects, and consequently they are all methods of instances of C — h being exactly equivalent to g. Note that this practice usually only serves to confuse the reader of a program.
Methods may call other methods by using method attributes of the self argument:
Methods may reference global names in the same way as ordinary functions. The global scope associated with a method is the module containing the class definition. (The class itself is never used as a global scope!) While one rarely encounters a good reason for using global data in a method, there are many legitimate uses of the global scope: for one thing, functions and modules imported into the global scope can be used by methods, as well as functions and classes defined in it. Usually, the class containing the method is itself defined in this global scope, and in the next section we’ll find some good reasons why a method would want to reference its own class!
Posted in English.
– 04/24/2012
words and class – 8
Chinese
English
Japanese
mathematics
science
gymnastics
8.4 Random Remarks
Data attributes override method attributes with the same name; to avoid accidental name conflicts, which may cause hard-to-find bugs in large programs, it is wise to use some kind of convention that minimizes the chance of conflicts. Possible conventions include capitalizing method names, prefixing data attribute names with a small unique string(perhaps just an underscore), or using verbs for methods and nouns for data attributes.
Data attributes may be referenced by methods as well as by ordinary users(“clients”) of an object. In other words, classes are not usable to implement pure abstract data types. In fact, nothing in Python makes it possible to enforce data hiding — it is all based upon convention. (On the other hand, the Python implementation, written in C, can completely hide implementation details and control access to an object if necessary; this can be used by extensions to Python written in C.)
Clients should use data attributes with care — clients may mess up invariants maintained by the methods of stamping on their data attributes. Note that clients may add data attributes of their own to an instance object without affecting the validity of the methods, as long as name conflicts are avoided — again, a naming convention can save a lot of headaches here.
There is no shorthand for referencing data attributes(or other methods!) from within methods. I find that this actually increases the readability of methods: there is no chance of confusing local variables and instance variables when glancing through a method.
Often, the first argument of a method is called self. This is nothing more than a convention: the name self has absolutely no special meaning to Python.(Note, however, that by not following the convention your code may be less readable to other Python programmers, and it is also conceivable that a class browser program might be written that relies upon such a convention.)
Posted in English.
– 04/23/2012
上海 苏州 杭州
计划带老婆孩子去趟沪苏杭玩玩。
行车路线,行车方式(高铁)
北京南 — 上海虹桥,一天从早上7:00到下午17:57,一共有47趟,硬座票价是555,软座票价是935。
上海虹桥 — 北京南,一天从早上7:00到下午17:54,一共有44趟,硬座票价是555,软座票价是935。
历时最短4:48小时,最长5:35小时,平均10分钟一趟。
上海 — 杭州,一天从早上6:38到晚上21:55,一共35趟,硬座票价是92,软座票价是115。
杭州 — 上海,一天从早上6:14到晚上22:23,一共35趟,硬座票价是92,软座票价是115。
历时最短49分钟,最长70分钟,平均30分钟一趟。
上海 — 苏州,一天从早上6:05到晚上21:15,一共81趟,硬座票价是40,软座票价是60。
苏州 — 上海,一天从早上6:52到晚上22:24,一共91趟,硬座票价是40,软座票价是60。
历时最短22分钟,最长50分钟,平均10分钟一趟。
北京南 — 杭州,一天从早上8:05到下午16:26,一共有7趟,硬座票价是631,软座票价是1058。
杭州 — 北京南,一天从早上7:18到下午16:36,一共有7趟,硬座票价是631,软座票价是1058。
历时最短6:20小时,最长6:40小时。
| 始发 | 终点 | 列车类型 | 历时 | 票价 | 票数 | 总价 |
| 北京南 | 上海虹桥 | 高铁 | 4:50 | 555 | 4 | 2220 |
| 北京南 | 杭州 | 高铁 | 6:30 | 631 | 4 | 2524 |
| 上海虹桥 | 苏州 | 高铁 | 30 | 40 | 4 | 160 |
| 上海虹桥 | 杭州 | 高铁 | 60 | 92 | 4 | 368 |
| 北京-杭州-上海 | 3052 | |||||
| 北京-上海-杭州 | 2748 |
Posted in 生活.
– 04/20/2012
words and class – 7
landing field
international terminal
domestic terminal
control tower
jetway
air bridge
visitors terrace
concourse
loading bridge
airline coach service
shuttle bus
8.3.4 Method Objects
Usually, a method is called right after it is bound:
In the MyClass example, this will return the string ‘hello world’. However, it is not necessary to call a method right away:x.f is a method object, and can be stored away and called at a later time. For example:
will continue to print ‘hello world’ until the end of time.
What exactly happens when a method is called? You may have noticed that x.f() was called without an argument above, even though the function definition for f specified an argument. What happened to the argument? Surely Python raises an exception when a function that requires an argument is called without any — even if the argument isn’t actually used…
Actually, you may have guessed the answer: the special thing about methods is that the object is passed as the first argument of the function. In our example, the call x.f() is exactly equivalent to MyClass.f(x). In general, calling a method with a list of n arguments is equivalent to calling the corresponding function with an argument list that is created by inserting the method’s object before the first argument.
If you still don’t understand how methods work, a look at the implementation can perhaps clarify matters. When an instance attribute is referenced that isn’t a data attribute, its class is searched. If the name denotes a valid class attribute that is a function object, a method object is created by packing(pointers to) the instance object and the function object just found together in an abstract object: this is the method object. When the method object is called with an argument list, it is unpacked again, a new argument list is constructed from the instance object and the original argument list, and the function object is called with this new argument list.
Posted in English.
– 04/20/2012
words and class – 6
regular flight
non-scheduled flight
international flight
domestic flight
flight number
airport
airline operation
alternate airfield
8.3.3 Instance Objects
Now what can we do with instance objects? The only operations understood by instance objects are attribute references. There are two kinds of valid attribute names, data attributes and methods.
data attributes correspond to “instance variables” in Smalltalk, and to “data members” in C++. Data attributes need not be declared; like local variables, they spring into existence when they are first assigned to. For example, if x is the instance of MyClass created above, the following piece of code will print the value 16, without leaving a trace:
The other kind of instance attribute reference is a method. A method is a function that “belongs to” an object.(In Python, the term method is not unique to class instances: other object types can have methods as well. For example, list objects have methods called append, insert, remove, sort, and so on. However, in the following discussion, we’ll use the term method exclusively to mean methods of class instance objects, unless explicitly stated otherwise.)
Valid method names of an instance object depend on its class. By definition, all attributes of a class that are function objects define corresponding methods of its instances. So in our example, x.f is a valid method reference, since MyClass.f is a function, but x.i is not, since MyClass.i is not. But x.f is not the same thing as MyClass.f — it is a method object, not a function object.
Posted in English.
– 04/19/2012
words and class – 5
light luggage
baggage elevator
baggage receipt
trolley
storage room
suite bag
travelling bag
shoulder bag
trunk
suitcase
name tag
8.3.2 Class Objects
Class objects support two kinds of operations: attribute references and instantiation.
Attribute references use the standard syntax used for all attribute references in Python: obj.name. Valid attribute are all the names that were in the class’s namespace when the class object was created. So, if the class definition looked like this:
then MyClass.i and MyClass.f are valid attribute references, returning an integer and a function object, respectively. Class attributes can also be assigned to, so you can change the value of MyClass.i by assignment. __doc__ is also a valid attribute, returning the docstring belonging to the class: “A simple example class”.
Class instantiation uses function notation. Just pretend that the class object is a parameterless function that returns a new instance of the class. For example(assuming the above class):
creates a new instance of the class and assigns this object to the local variable x.
The instantiation operation(“calling” a class object) creates an empty object. Many classes like to create objects with instances customized to a specific initial state. Therefore a class may define a special method named __init__(), like this, When a class defines an __init__() method, class instantiation automatically invokes __init__() for the newly-created class instance. So in this example, a new, initialized instance can be obtained by: Of course, the __init__() method may have arguments for greater flexibility. In that case, arguments given to the class instantiation operator are passed on to __init__(). For example.
Posted in English.
– 04/18/2012
words and class – 4
unmade room
on change
valuables
porter
luggage/baggage
registered luggage/checked luggage
8.3 A First Look at Classes
Classes introduce a little bit of new syntax, three new object types, and some new semantics.
8.3.1 Class Definition Syntax
The simplest form of class definition looks like this:
Class definitions, like function definitions(def statements)must be executed before they have any effect.(You could conceivably place a class definition in a branch of an if statement, or inside a function.)
In practice, the statement inside a class definition will usually be function definitions, but other statements are allowed, and sometimes useful – we’ll come back to this later. The function definitions inside a class normally have a peculiar form of argument list, dictated by the calling conventions for methods – again, this is explained later.
When a class definition is entered, a new namespace is created, and used as the local scope – thus, all assignments to local variables go into this new namespace. function definitions bind the name of the new function here.
When a class definition is left normally (via the end), a class object is created. This is basically a wrapper around the contents of the namespace created by the class definition; we’ll learn more about class objects in the next section. The original local scope(the one in effect just before the class definition was entered) is reinstated, and the class object is bound here to the class name given in the class definition header(ClassName in the example).
Posted in English.
– 04/17/2012
words and class – 3
imperial suite
presidential suite
suite deluxe
junior suite
mini suite
honeymoon suite
penthouse suite
The local namespace for a function is created when the function is called, and deleted when the function returns or raises an exception that is not handled within the function. (Actually, forgetting would be a better way to describe what actually happens.) Of course, recursive invocation each have their own local namespace.
A scope is a textual region of a Python program where a namespace is directly accessible. “Directly accessible” here means that an unqualified reference to a name attempts to find the name in the namespace.
Although scopes are determined statically, they are used dynamically. At any time during execution, there are at least three nested scopes whose namespaces are directly accessible: the innermost scope, which is searched first, contains the local names; the namespaces of any enclosing functions, which are searched starting with the nearest enclosing scope; the middle scope, searched next, contains the current module’s global names; and the outermost scope(searched last)is the namespace containing built-in names.
If a name is declared global, then all references and assignments go directly to the middle scope containing the module’s global names. Otherwise, all variables found outside of the innermost scope are read-only(an attempt to write to such a variable will simply create a new local variable in the innermost scope, leaving the identically named outer variable unchanged).
Usually, the local scope references the local names of the (textually) current function. Outside functions, the local scope references the same namespace as the global scope: the module’s namespace. Class definitions place yet another namespace in the local scope.
It is important to realize that scopes are determined textually: the global scope of a function defined in a module is that module’s namespace, no matter from where or by what alias the function is called. On the other hand, the actual search for names is done dynamically, at run time — however, the language definition is evolving towards static name resolution, at ‘compile’ time, so don’t rely on dynamic name resolution!(In fact, local variables are already determined statically.)
A special quirk of Python is that assignments always go into the innermost scope. Assignments do not copy data, they just bind names to objects. The same is true for deletions: the statement ‘del x’ removes the binding of x from the namespace referenced by the local scope. In fact, all operations that introduce new names use the local scope: in particular, import statements and function definitions bind the module or function name in the local scope.(The global statement can be used to indicate that particular variables live in the global scope.)
Posted in English.
– 04/16/2012
近期评论